package _2异常的分类;

public class ExceptionDemo {
public static void main(String[] args) {
		
		
		// throwable(病)
		
		// 	--	Error		错误	(严重 癌症)
		//  --  Excpeiton	异常 (可以治疗的疾病)
		
		
		// 1. Error 
		// java.lang.StackOverflowError
		// 递归没有返回的语句，不断调用自己，结果造成栈内存爆掉了
//		foo(10);
		
		
		// 2. Exception
		//    2.1 受检异常	必须要try-catch处理或继续抛出			(新冠)
					//	InterruptedException
		//    2.2 运行时异常(RuntimeException)   不是必须要try-catch 一旦出现，程序也要崩溃   (牙疼)
					// 继承自RuntimeException
					// ArithmeticException
					// ArrayIndexOutOfBoundsException
					// NullPointerException	
		
		// 2.1 受检异常
		// InterruptedException
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// 2.2 运行时异常
		
		// 除零异常
		// ArithmeticException
		System.out.println(1/0);
		
		// 数组越界
		// ArrayIndexOutOfBoundsException
//		int[] arr = {10,20,30};
//		System.out.println(arr[5]);
		
		// 空指针
		// java.lang.NullPointerException		
//		String str = null;
//		Student stu = null;
//		System.out.println(str.length());
		
		
		System.out.println("程序正常结束");
		
		
	}
	
	public static void foo(int n)
	{
		foo(n-1);
	}

}

